home *** CD-ROM | disk | FTP | other *** search
- unit twmlprod;
- interface
- uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- HTTPApp, DB, DBWeb;
-
- type
- TWMLDataSetTableProducer = class(TDataSetTableProducer)
- public
- function TableHeader: string; override;
- function Content: string; override;
- end;
-
- procedure Register;
-
- implementation
- const
- StartRow = '<tr>';
- EndRow = '</tr>';
-
- function EnCode(Str: String): String;
- { Convert memo contents to single line XML }
- var
- i: Integer;
- begin
- for i:=Length(Str) downto 1 do
- begin
- case Str[i] of
- '"': begin
- Insert('"',Str,i+1);
- Delete(Str,i,1)
- end;
- '''': begin
- Insert(''',Str,i+1);
- Delete(Str,i,1)
- end;
- '&': begin
- Insert('&',Str,i+1);
- Delete(Str,i,1)
- end;
- '<': begin
- Insert('<',Str,i+1);
- Delete(Str,i,1)
- end;
- '>': begin
- Insert('>',Str,i+1);
- Delete(Str,i,1)
- end;
- '-': begin
- Insert('',Str,i+1);
- Delete(Str,i,1)
- end;
- else
- if (Ord(Str[i]) in [1..31]) then
- begin
- Insert(''+IntToStr(Ord(Str[i]))+';',Str,i+1);
- Delete(Str,i,1)
- end
- else
- if Str[i] = #0 then Delete(Str,i,1)
- end
- end;
- Result := Str
- end {EnCode};
-
- function WMLTable(DataSet: TDataSet; DataSetHandler: TWMLDataSetTableProducer;
- MaxRows: Integer): string;
- var
- I, J: Integer;
- DisplayText: string;
- Field: TField;
- Column: THTMLTableColumn;
- begin
- Result := DataSetHandler.TableHeader + #13#10;
- if DataSet.State = dsBrowse then
- begin
- J := 1;
- while (MaxRows <> 0) and not DataSet.EOF do
- begin
- Result := Result + StartRow;
- for I := 0 to DataSetHandler.Columns.Count - 1 do
- begin
- Column := DataSetHandler.Columns[I];
- Field := Column.Field;
- if Field <> nil then
- DisplayText := EnCode(Field.DisplayText)
- else DisplayText := '';
- with Column do
- Result := Result + DataSetHandler.FormatCell(J, I, DisplayText,
- 'td', '', Align, VAlign, '');
- end;
- Result := Result + EndRow + #13#10;
- DataSet.Next;
- Dec(MaxRows);
- Inc(J);
- end;
- end;
- Result := Result + '</table>';
- end;
-
- { TWMLDataSetTableProducer }
-
- function TWMLDataSetTableProducer.Content: string;
- begin
- Result := '';
- if DataSet <> nil then
- begin
- if DataSet.Active and (Columns.Count = 0) then LayoutChanged;
- if DoCreateContent then
- Result := Header.Text + WMLTable(DataSet, Self, MaxRows) + Footer.Text;
- end;
- end;
-
- function TWMLDataSetTableProducer.TableHeader: string;
- begin
- Result := '<table';
- with TableAttributes do
- begin
- if Width > 0 then
- Result := Format('%s columns="%d"', [Result, Columns.Count]);
- if Custom <> '' then
- Result := Format('%s %s', [Result, Custom]);
- end;
- Result := Result + '>';
- end;
-
- procedure Register;
- begin
- RegisterComponents('DrBob42', [TWMLDataSetTableProducer]);
- end;
-
- end.
-